const websocket = require('./websocket');
require('dotenv').config(); // 加载环境变量

const REFRESH_INTERVAL = process.env.REFRESH_INTERVAL || 1000;
const WARNING_INTERVAL = process.env.WARNING_INTERVAL || 10000;

// 启动定时数据更新
function startSchedulers(wss) {
    // 定时更新数据调度器
    const dataUpdateScheduler = scheduleDataUpdates(wss);

    // 定时发送预警调度器
    const alarmScheduler = scheduleAlarms(wss);

    return {
        dataUpdateScheduler,
        alarmScheduler
    };
}

// 定时更新数据
function scheduleDataUpdates(wss) {
    // 每REFRESH_INTERVAL毫秒更新一次数据
    const intervalId = setInterval(async () => {
        try {
            // 随机选择一个数据类型进行更新
            const dataTypes = ['air_quality', 'pollution_ranking', 'temperature_humidity', 'water_quality', 'energy_consumption', 'monitoring_stations', 'overview_stats'];
            const randomType = dataTypes[Math.floor(Math.random() * dataTypes.length)];

            await websocket.broadcastSingleUpdate(wss, randomType);
            console.log(`已更新数据类型: ${randomType}`);
        } catch (error) {
            console.error('定时更新数据失败:', error);
        }
    }, REFRESH_INTERVAL); // REFRESH_INTERVAL毫秒

    return intervalId;
}

// 定时发送预警
function scheduleAlarms(wss) {
    // 随机发送预警信息
    const intervalId = setInterval(() => {
        try {
            // 60%的概率发送预警
            if (Math.random() < 0.6) {
                websocket.broadcastAlarm(wss);
            }
        } catch (error) {
            console.error('定时发送预警失败:', error);
        }
    }, WARNING_INTERVAL); // WARNING_INTERVAL毫秒

    return intervalId;
}

// 停止所有调度器
function stopSchedulers(schedulers) {
    if (schedulers.dataUpdateScheduler) {
        clearInterval(schedulers.dataUpdateScheduler);
    }

    if (schedulers.alarmScheduler) {
        clearInterval(schedulers.alarmScheduler);
    }

    console.log('所有调度器已停止');
}

module.exports = {
    startSchedulers,
    stopSchedulers
};